
/**
 * 沙盒类，将外部data方法放入此类然后用eval 执行得到结果。
 */
class SandBox{
    /**
     * 构造函数
     */
    constructor(){
    }

    run(jsCode,_$data,_$methods,_$addData){
        if(_$data){
            for (var key in _$data) {
                if (_$data.hasOwnProperty(key)) {
                    tempVarEval = `var ${key} = _$data['${key}']`
                    eval(tempVarEval)
                }
            }
        }
        if(_$addData){
            for (var key in _$addData) {
                if (_$addData.hasOwnProperty(key)) {
                    tempVarEval = `var ${key} = _$addData['${key}']`
                    eval(tempVarEval)
                }
            }
        }
        if(_$methods){
            for (var key in _$methods) {
                if (_$methods[key]) {
                    tempVarEval = `var $f_${key} = _$methods['${key}']`
                    eval(tempVarEval)
                }
            }
        }
        var _$jsCoderesult;
        try{
            jsCode=jsCode.replace(/(^\s*)|(\s*$)/g, "");
            _$jsCoderesult=eval(jsCode);
        }catch(e){
            throw e
        }finally{

        }
        return _$jsCoderesult
    }

}

module.exports = SandBox;